# 集合的排序规则是字典排序，在集合中不会参在相同类型的值

''' ----------------------------- 集合的操作 -----------------------------'''
sat = {1,2,"hello","哈哈",0.5}; #创建集合的第一种方式
print(sat); #{0.5, 1, 2, 'hello', '哈哈'}

#set() 入参还可以是元组，列表，字符串（入参为一个字符串时，会被分解为字符），甚至是一个集合（{}）
sat = set({1,2,"hello","哈哈",0.5,'48s48'}); #创建集合的第二种方式
print(sat); #{0.5, 1, 2, 'hello', '48s48', '哈哈'}

#入参为一个字符串演示
sat = set("你好，世界");
print(sat); #{'世', '好', '你', '界', '，'}

''' ----------------------------- 增 -----------------------------'''
# add() 一次添加一个元素，如果集合为空时，调用 add() 会报错
sat = {789};
sat.add("666");
sat.add("666");
print(sat); #{'666', 789}

# update() 一次添加多个元素
sat.update("Hello","Word",range(0,3));
print(sat); #{'d', 0, 1, 2, '666', 'o', 'l', 'W', 'H', 789, 'r', 'e'}

''' ----------------------------- 删 -----------------------------'''
# remove() 根据元素删除，不存在会抛出异常
sat.remove('H');
print(sat); #{0, '666', 1, 2, 'e', 'l', 'r', 'W', 789, 'd', 'o'}

# discard 根据元素删除，不存在也不会抛出异常
sat.discard(888);
print(sat); #{0, 1, 2, 'e', 'W', 'd', 'l', 'o', 789, 'r', '666'}

# clear() 清空集合
sat.clear();
print(sat); #set()

# pop() 随机删除一个元素，不能有参数
sat = {"你好","世界！","未来","一定","会更好！"};
print(sat); #{'世界！', '会更好！', '一定', '未来', '你好'}
sat.pop();
print(sat); #{'会更好！', '一定', '未来', '世界！'}

''' ----------------------------- 查 -----------------------------'''
print(666 in sat); # False
print("666" in sat); # True

print(666 not in sat); # True
print("666" not in sat); # False

# 判断两个集合是否相等 ==，!=  判断的只是元素
sat = {1,2,3,4};
sat2 = {4,3,2,1};
print(sat == sat2); #True

# 判断一个集合是否是另一个集合的子集合 issubset()
sat = {1,2,3,4,5,6,7,8,9};
sat2 = {4,3,2,1};
print(sat2.issubset(sat)); #True, sat包含了sat2的所有元素。 两个相等的集合，都是对方集合的子集合

# 判断一个集合是否是另一个集合的子集合 issuperset()
sat = {1,2,3,4,5,6,7,8,9};
sat2 = {4,3,2,1};
print(sat2.issuperset(sat)); #False, sat是sat2的超集。 两个相等的集合，都是对方集合的子集合

# 判断两个集合是否"没有"交集 isdisjoint()
sat = {6666,7777,8888};
sat2 = {4,3,2,1};
print(sat2.isdisjoint(sat)); #False, sat是sat2的超集。 两个相等的集合，都是对方集合的子集合


''' ----------------------------- 其他操作 -----------------------------'''
sat = {1,2,3,4,5};
sat2 = {1,3,5,7,9};

# 交集 intersection() 等同于 &，交集指的是两个集合中元素重叠的地方
print(sat.intersection(sat2)); #{1, 3, 5}
print(sat & sat2); #{1, 3, 5}

# 并集 union() 等同于 |，并集指的是两个集合中，一个集合将重叠的元素去除，剩余的部分（可以理解为，两个集合合并了，但是千万别忽略了集合的特性）
print(sat.union(sat2)); #{1, 2, 3, 4, 5, 7, 9}
print(sat | sat2); #{1, 2, 3, 4, 5, 7, 9}

# 差集 difference() 等同于 -，差集指的是 第一个集合减掉第二个集合后，第一个集合所剩余的元素部分
print(sat.difference(sat2)); #{2, 4}
print(sat - sat2); #{2, 4}

# 对称差集 symmetric_difference 等同于 ^，对称差集指的是两个集合将重叠的元素去除，剩余的部分
print(sat.symmetric_difference(sat2)); #{2, 4, 7, 9}
print(sat ^ sat2); #{2, 4, 7, 9}

#集合生成式
sat = {i for i in range(1,5)};
print(sat); #{1, 2, 3, 4}

# 遍历
for item in sat:
    print(item);
    '''
        1
        2
        3
        4
    '''


